<--- %%NOBANNER%% --> bnmlci.sas
 BackForward

/*-------------------<-- Start of Description-->---------------------\
| BNMLCI: Exact Confidence Interval for proportions;                 |
|---------------------<-- End of Description-->----------------------|
|--------------------------------------------------------------------|
|-----------<-- Start of Files or Arguements Needed-->---------------|
| Arguments:                                                         |
|    WIDTH =95, for a 95% CI, 99 for a 99% CI etc;                   |
|           Default is 95;                                           |
|    X     =Observed number of successes in N trials;                |
|    N     =Number of binomial trials;                               |
| Optional Parameters: Used to generate a TABLE of exact CIs for all |
|    values  of X for each N ranging from NMIN to NMAX.              |
|    NMIN = smallest value of N to table;                            |
|    NMAX = largest value of N to table;                             |
|    Note that the parameters X and N are ignored if one is creating |
|    a table.                                                        |
| Methodology: The macro is based on the exact relationship between  |
|          the beta dist'n and the cumulative binomial as described  |
|          in Feller(see above).                                     |
| Output: The results of a PRINT on the data set _exact_.            |
|         Upper & lower confidence limits for the 3 methods.         |
|------------<-- End of Files or Arguements Needed-->----------------|
|--------------------------------------------------------------------|
|------------------<-- Start of Files Created-->---------------------|
| Example:                                                           |
|     %BNMLCI(x=6,n=93);                                             |
|    *Table of exact 95pct CIs for all possible Xs for N=10 to 15;   |
|    %bnmlci(nmin=10,nmax=15);                                       |
| Usage: %BNMLCI(width=,x=,n=,nmin=,nmax=);                          |
\------------------<-- Start of Files Created-->--------------------*/
%MACRO bnmlci(WIDTH=95,x=,n=,nmin=,nmax=);
/*--------------------------------------------\
| Author:  Duo Zhou;                          |
| Created: 2-1-2002 7:21pm;                   |
| Purpose: Binomial Exact Confidence Interval;|
\--------------------------------------------*/
Data _exact_;
   IF ^(10 LE &WIDTH LE 99) THEN DO;
      PUT "NOT EXECUTED: CONFIDENCE INTERVAL WIDTH IS LT 10 OR GT 99";
      STOP;
   END;
   %if &nmin= %then %do;
   IF &X GT &N OR &X LT 0 OR &N LT 2 THEN DO;
      PUT "NOT EXECUTED: X IS LT 0 OR X GT N OR N LT 2";
      STOP;
   END;
   %end;

   LPCT=(1-&WIDTH/100)/2;
   UPCT=1-LPCT;

   %if &x^= %then %do; x=&x; %end;
   %if &n^= %then %do; n=&n; %end;
   %if &nmin^= %then %do;
   do n=&nmin to &nmax;
      do x=0 to n;
   %end;
   Phat=x/n;
   **NORMAL APPROXIMATION;
   L_normal=PHAT+PROBIT(LPCT)*SQRT(PHAT*(1-PHAT)/N);  *LOWER LIMIT;
   U_normal=PHAT+PROBIT(UPCT)*SQRT(PHAT*(1-PHAT)/N);  *UPPER LIMIT;
   **POISSON APPROXIMATION;
   DF_LO=2*X;
   DF_UP=2*(X+1);
   IF X GT 0 THEN L_poissn=GAMINV(LPCT,DF_LO/2)/N;  *LOWER LIMIT;
   ELSE L_POI=0;
   U_poissn=GAMINV(UPCT,DF_UP/2)/N;                 *UPPER LIMIT;

   *** EXACT BINOMIAL CONFIDENCE LIMITS ***equn 10.7 of Feller*;
   * Upper limit;
   if x0 then l_exact=1-betainv(upct,n-x+1,x);
   else l_exact=0;

   output;

   %if &nmin^= %then %do;
      end;
   end;
   %end;
   FORMAT PHAT L_normal U_normal L_poissn U_poissn L_exact U_exact 6.4;
   label phat='Phat*(x/N)' l_exact='Exact CI*Lower' u_exact='Exact CI*Upper'
         l_normal='Normal*Approx.*Lower' u_normal='Normal*Approx.*Upper'
         l_poissn='Poisson*Approx.*Lower' u_poissn='Poisson*Approx.*Upper';
proc print data=_exact_ split='*'; by n; id n;
   var x phat l_exact u_exact l_normal u_normal l_poissn u_poissn;
title5"&width Percent Confidence Int. for Binomial(P),N trials,x successes)";
title6"Exact intervals are based on Feller(Wiley 1968, eqn 10.7).          ";
title7"Also printed are Normal & Poisson approximations to the binomial."; run;
title5; run;
%mend bnmlci;